package Java_promotion_136_228.Java199_205_Lambda;

import java.lang.invoke.LambdaConversionException;


/**
 * Java中要使用Lambda表达式前提是必须有“函数式接口”。
 * <p>
 * 函数式接口：有且仅有一个抽象方法的接口
 * <p>
 * 如何检测当前接口是不是函数式接口
 * 用一个固定的格式写在public interface前一行
 *
 * @FunctionalInterface public interface 函数式接口名{
 * //...
 * }
 */
@FunctionalInterface
public interface Calculator {
    int sum(int a, int b);
}

class Calcu {
    public static void main(String[] args) {
        calc((a, b) -> a + b);
        /*
        Lambda表达式：(a, b) -> a + b
        方法需要一个Calculator接口类型的参数
        Lambda表达式就是充当了Calculator接口类型的参数
        理解：
        Lambda表达式前面的小括号，就是接口抽象方法的小括号。
        箭头就是拿着小括号的数据做什么事情，是一个指向性的动作
        箭头后面就是拿到的参数在做什么事情

        语义就是本身怎么做这件事情，没有对象的概念
        */
    }

    public static void calc(Calculator calculator) {
        int result = calculator.sum(10, 20);
        System.out.println("结果是：" + result);
    }
}
